{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9e9e87f7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "99500d9b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取训练集\n",
    "train = np.loadtxt('click.csv', delimiter=',', skiprows=1)\n",
    "train_x = train[:,0]\n",
    "train_y = train[:,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "514d7911",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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3pDei0d9AUQbAgowgW40CfWJ+TfzqC+AmMQcFGCC3WgSKo/6AohFbBYIRACzrjYLAOEI5/ubERQgAvCoL4BYQ0ABIgSP+gKIJUySBQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAApkNAAQAAphNWQNm1a5dmzpyptLQ0paWlad68eXr//feD5WvXrpXFYgk55s6dG/IegUBAGzduVGZmplJSUrRs2TJduHBhdK4GAABEhbACyk033aTnnntOf/zjH/XHP/5R8+fP1w9+8AOdOXMmWKekpERutzt4HDhwIOQ9ysrKVF1draqqKh05ckQdHR1aunSpuru7R+eKAABAxLMYhmGM5A3S09P14osvat26dVq7dq0uX76s3/zmNwPW9fl8mjp1qvbt26eVK1dKki5evKicnBwdOHBAixcvHtLf9Pv9stls8vl8SktLG0nzAQDAOAnn+3vYc1C6u7tVVVWlL7/8UvPmzQuer62tVVZWlmbMmKH169fL6/UGyxoaGnT16lUtWrQoeM7pdMrlcuno0aOD/q1AICC/3x9yAACA6BV2QGlsbNQ3vvENWa1WPfroo6qurlZ+fr4kacmSJXrrrbd0+PBh7dixQ/X19Zo/f74CgYAkyePxKCkpSVOmTAl5z+zsbHk8nkH/ZkVFhWw2W/DIyckJt9kAACCCJIT7gu985zs6ffq0Ll++rP/4j//QmjVrVFdXp/z8/OBtG0lyuVyaNWuWcnNz9d5772n58uWDvqdhGLJYLIOWb968WU899VTw336/n5ACAEAUCzugJCUl6eabb5YkzZo1S/X19XrllVf07//+7/3qOhwO5ebm6ty5c5Iku92urq4utbW1hYyieL1eFRUVDfo3rVarrFZruE0FAAARasTroBiGEbyF01dra6taWlrkcDgkSYWFhUpMTNTBgweDddxut5qamq4bUAAAQGwJawTl2Wef1ZIlS5STk6P29nZVVVWptrZWNTU16ujo0NatW3X//ffL4XDos88+07PPPqvMzEzdd999kiSbzaZ169apvLxcGRkZSk9P16ZNm1RQUKDi4uIxuUAA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xo1699139dFHH+mmm24KnuezPfoG6+uB8Nm+PgJKBAsEAvr444/lcDiUl5cnu92ugwcPBsu7urpUV1enoqKiCWxl5BtK3xYWFioxMTGkjtvtVlNTE/0/Qq2trWppaZHD4ZBEX4fDMAw98cQT+vWvf63Dhw8rLy8vpJzP9ui5UV8PhM/2DUzQ5FwMQ3l5uVFbW2ucP3/eOH78uLF06VIjNTXV+OyzzwzDMIznnnvOsNlsxq9//WujsbHReOihhwyHw2H4/f4Jbrn5tbe3G6dOnTJOnTplSDJeeukl49SpU8af//xnwzCG1rePPvqocdNNNxmHDh0yTp48acyfP9+49dZbjb/97W8TdVmmdL2+bm9vN8rLy42jR48azc3NxkcffWTMmzfP+Na3vkVfD8OGDRsMm81m1NbWGm63O3h89dVXwTp8tkfHjfqaz3b4CCgRZOXKlYbD4TASExMNp9NpLF++3Dhz5kywvKenx9iyZYtht9sNq9Vq/MM//IPR2Ng4gS2OHB999JEhqd+xZs0awzCG1rednZ3GE088YaSnpxuTJk0yli5danz++ecTcDXmdr2+/uqrr4xFixYZU6dONRITE41vf/vbxpo1a/r1I309NAP1syTjl7/8ZbAOn+3RcaO+5rMdPothGMb4jdcAAADcGHNQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6RBQAACA6fx/pPOh4f2d3L0AAAAASUVORK5CYII=\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘图\n",
    "plt.plot(train_x, train_y, 'o')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "85b16f20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "theta0 = 0.736013, theta1 = 0.301180\n"
     ]
    }
   ],
   "source": [
    "theta0 = np.random.rand()\n",
    "theta1 = np.random.rand()\n",
    "print('theta0 = %f, theta1 = %f' % (theta0, theta1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "b9bb00ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "# f(x)\n",
    "def f(x):\n",
    "    return theta0 + theta1 * x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "60fc61e0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 误差函数\n",
    "def E(x, y):\n",
    "    return 0.5 * np.sum((y - f(x)) ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "bb0322f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mu = 141.600000, sigma = 66.985372\n"
     ]
    }
   ],
   "source": [
    "mu = train_x.mean()\n",
    "sigma = train_x.std()\n",
    "print('mu = %f, sigma = %f' % (mu, sigma))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "b7b3e314",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 标准化\n",
    "def standardize(x):\n",
    "    return (x - mu) / sigma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "5bcb5001",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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oWuvvXa4qxFw4bgIXTi2WQrPdtPm8ECbw8NA2nylnpMuDJIFAACmQ0ABAACmQ0AxgZiYGK1fv14xMTHDXZUhE45tlsKz3bQ5PNDm8DCUbQ7KQbIAACC00YMCAABMh4ACAABMh4ACAABMh4ACAABMh4AyTH79618rLy9PI0eO1DXXXNOn1yxfvlwWi8XnmDZt2uBWNID602bDMLRhwwalpaXpqquu0q233qoTJ04MbkUDqLm5WUuXLpXVapXVatXSpUt17ty5y74mGO/zv/3bvykzM1OxsbHKycnRH//4x8uWr6qqUk5OjmJjY/X9739fL7744hDVNHD8aXNlZWW3e2qxWPTXv/51CGs8MB988IHmz5+vtLQ0WSwW/e53v7via4L9Pvvb5mC/z8XFxbrpppsUHx+vlJQU/cM//IM++uijK75usO4zAWWYtLe366677tKqVav8el1hYaEcDof32Ldv3yDVMPD60+ZnnnlGzz33nF544QVVV1fLZrNp9uzZ3v2YzO6+++7T8ePHVV5ervLych0/flxLly694uuC6T6/9tprKioq0lNPPaVjx47pxz/+sebOnasvvviix/INDQ36+7//e/34xz/WsWPH9OSTT+rhhx/W66+/PsQ17z9/29zlo48+8rmvY8eOHaIaD9w333yjH/3oR3rhhRf6VD4U7rO/be4SrPe5qqpKDz30kA4fPqyKigr97W9/U0FBgb755pteXzOo99nAsHrppZcMq9Xap7LLli0zbr/99kGtz1Doa5s7OzsNm81mPP30095z58+fN6xWq/Hiiy8OYg0Do76+3pBkHD582Hvu0KFDhiTjr3/9a6+vC7b7PGXKFOOBBx7wOfeDH/zAeOKJJ3os/9hjjxk/+MEPfM7df//9xrRp0watjoHmb5vff/99Q5LR3Nw8BLUbfJKMsrKyy5YJhfv8XX1pc6jd56amJkOSUVVV1WuZwbzP9KAEmcrKSqWkpGjcuHFauXKlmpqahrtKg6ahoUFOp1MFBQXeczExMZoxY4YOHjw4jDXrm0OHDslqtWrq1Knec9OmTZPVar1i/YPlPre3t6umpsbnHklSQUFBr208dOhQt/Jz5szRhx9+qAsXLgxaXQOlP23uMmnSJNntduXn5+v9998fzGoOu2C/zwMRKvfZ5XJJkhITE3stM5j3mYASRObOnatXXnlF7733nrZs2aLq6mrNnDlTHo9nuKs2KJxOpyQpNTXV53xqaqr3mpk5nU6lpKR0O5+SknLZ+gfTff7666/V0dHh1z1yOp09lv/b3/6mr7/+etDqGij9abPdbtf27dv1+uuv64033tD48eOVn5+vDz74YCiqPCyC/T73RyjdZ8Mw9Oijj+qWW25RdnZ2r+UG8z4H5W7GZrVhwwZt3LjxsmWqq6uVm5vbr/e/++67vf+cnZ2t3NxcZWRk6K233tLChQv79Z4DNdhtliSLxeLzt2EY3c4Npb62Weped+nK9Tfjfb4Sf+9RT+V7Om9m/rR5/PjxGj9+vPfv6dOnq7GxUf/yL/+in/zkJ4Naz+EUCvfZH6F0n3/+85/rz3/+sw4cOHDFsoN1nwkoAfTzn/9c99xzz2XLXHfddQH7PLvdroyMDJ08eTJg7+mvwWyzzWaTdDGh2+127/mmpqZuiX0o9bXNf/7zn/XVV191u/Y///M/ftXfDPe5N8nJyYqIiOjWc3C5e2Sz2XosHxkZqaSkpEGra6D0p809mTZtmkpKSgJdPdMI9vscKMF4n1evXq0333xTH3zwga699trLlh3M+0xACaDk5GQlJycP2eedOXNGjY2NPl/eQ20w25yZmSmbzaaKigpNmjRJ0sXn/1VVVdq8efOgfGZf9LXN06dPl8vl0pEjRzRlyhRJ0p/+9Ce5XC7l5eX1+fPMcJ97Ex0drZycHFVUVOiOO+7wnq+oqNDtt9/e42umT5+uvXv3+pzbv3+/cnNzFRUVNaj1DYT+tLknx44dM+U9DZRgv8+BEkz32TAMrV69WmVlZaqsrFRmZuYVXzOo93nAw2zRL59//rlx7NgxY+PGjcbVV19tHDt2zDh27JjR0tLiLTN+/HjjjTfeMAzDMFpaWow1a9YYBw8eNBoaGoz333/fmD59uvF3f/d3htvtHq5m+MXfNhuGYTz99NOG1Wo13njjDaO2tta49957DbvdHjRtLiwsNCZOnGgcOnTIOHTokDFhwgRj3rx5PmWC/T6XlpYaUVFRxs6dO436+nqjqKjIiIuLMz777DPDMAzjiSeeMJYuXeot/+mnnxojR440HnnkEaO+vt7YuXOnERUVZfznf/7ncDXBb/62eevWrUZZWZnx8ccfG3V1dcYTTzxhSDJef/314WqC31paWrz/zUoynnvuOePYsWPG559/bhhGaN5nf9sc7Pd51apVhtVqNSorKw2Hw+E9vv32W2+ZobzPBJRhsmzZMkNSt+P999/3lpFkvPTSS4ZhGMa3335rFBQUGKNHjzaioqKM733ve8ayZcuML774Ynga0A/+ttkwLk41Xr9+vWGz2YyYmBjjJz/5iVFbWzv0le+nM2fOGIsXLzbi4+ON+Ph4Y/Hixd2mIIbCff7Xf/1XIyMjw4iOjjYmT57sMy1x2bJlxowZM3zKV1ZWGpMmTTKio6ON6667zti2bdsQ13jg/Gnz5s2bjTFjxhixsbHGqFGjjFtuucV46623hqHW/dc1hfbSY9myZYZhhOZ99rfNwX6fe2rrpf+fPJT32fK/lQIAADANphkDAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADTIaAAAADT+f/wNUUS0VmEzgAAAABJRU5ErkJggg==\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_z = standardize(train_x)\n",
    "plt.plot(train_z, train_y, 'o')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "70b3bd27",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第1次, theta0 = 9.304, theta1 = 2.165, 差值 = 76119.3604\n",
      "第2次, theta0 = 17.701, theta1 = 3.991, 差值 = 73105.0337\n",
      "第3次, theta0 = 25.930, theta1 = 5.781, 差值 = 70210.0744\n",
      "第4次, theta0 = 33.995, theta1 = 7.535, 差值 = 67429.7555\n",
      "第5次, theta0 = 41.898, theta1 = 9.254, 差值 = 64759.5371\n",
      "第6次, theta0 = 49.643, theta1 = 10.938, 差值 = 62195.0595\n",
      "第7次, theta0 = 57.233, theta1 = 12.589, 差值 = 59732.1351\n",
      "第8次, theta0 = 64.671, theta1 = 14.207, 差值 = 57366.7426\n",
      "第9次, theta0 = 71.961, theta1 = 15.792, 差值 = 55095.0196\n",
      "第10次, theta0 = 79.105, theta1 = 17.346, 差值 = 52913.2568\n",
      "第11次, theta0 = 86.105, theta1 = 18.869, 差值 = 50817.8918\n",
      "第12次, theta0 = 92.966, theta1 = 20.361, 差值 = 48805.5033\n",
      "第13次, theta0 = 99.690, theta1 = 21.823, 差值 = 46872.8054\n",
      "第14次, theta0 = 106.279, theta1 = 23.256, 差值 = 45016.6423\n",
      "第15次, theta0 = 112.737, theta1 = 24.661, 差值 = 43233.9832\n",
      "第16次, theta0 = 119.065, theta1 = 26.037, 差值 = 41521.9175\n",
      "第17次, theta0 = 125.267, theta1 = 27.386, 差值 = 39877.6496\n",
      "第18次, theta0 = 131.344, theta1 = 28.708, 差值 = 38298.4947\n",
      "第19次, theta0 = 137.300, theta1 = 30.003, 差值 = 36781.8743\n",
      "第20次, theta0 = 143.137, theta1 = 31.273, 差值 = 35325.3120\n",
      "第21次, theta0 = 148.858, theta1 = 32.517, 差值 = 33926.4297\n",
      "第22次, theta0 = 154.464, theta1 = 33.736, 差值 = 32582.9431\n",
      "第23次, theta0 = 159.957, theta1 = 34.931, 差值 = 31292.6585\n",
      "第24次, theta0 = 165.341, theta1 = 36.102, 差值 = 30053.4692\n",
      "第25次, theta0 = 170.617, theta1 = 37.249, 差值 = 28863.3519\n",
      "第26次, theta0 = 175.788, theta1 = 38.374, 差值 = 27720.3631\n",
      "第27次, theta0 = 180.855, theta1 = 39.476, 差值 = 26622.6368\n",
      "第28次, theta0 = 185.821, theta1 = 40.556, 差值 = 25568.3803\n",
      "第29次, theta0 = 190.688, theta1 = 41.615, 差值 = 24555.8725\n",
      "第30次, theta0 = 195.457, theta1 = 42.652, 差值 = 23583.4599\n",
      "第31次, theta0 = 200.131, theta1 = 43.668, 差值 = 22649.5549\n",
      "第32次, theta0 = 204.711, theta1 = 44.665, 差值 = 21752.6325\n",
      "第33次, theta0 = 209.200, theta1 = 45.641, 差值 = 20891.2283\n",
      "第34次, theta0 = 213.599, theta1 = 46.598, 差值 = 20063.9356\n",
      "第35次, theta0 = 217.910, theta1 = 47.535, 差值 = 19269.4038\n",
      "第36次, theta0 = 222.135, theta1 = 48.454, 差值 = 18506.3354\n",
      "第37次, theta0 = 226.275, theta1 = 49.355, 差值 = 17773.4845\n",
      "第38次, theta0 = 230.333, theta1 = 50.237, 差值 = 17069.6545\n",
      "第39次, theta0 = 234.309, theta1 = 51.102, 差值 = 16393.6962\n",
      "第40次, theta0 = 238.206, theta1 = 51.949, 差值 = 15744.5058\n",
      "第41次, theta0 = 242.025, theta1 = 52.780, 差值 = 15121.0234\n",
      "第42次, theta0 = 245.767, theta1 = 53.594, 差值 = 14522.2309\n",
      "第43次, theta0 = 249.435, theta1 = 54.392, 差值 = 13947.1505\n",
      "第44次, theta0 = 253.029, theta1 = 55.173, 差值 = 13394.8434\n",
      "第45次, theta0 = 256.551, theta1 = 55.940, 差值 = 12864.4076\n",
      "第46次, theta0 = 260.003, theta1 = 56.690, 差值 = 12354.9770\n",
      "第47次, theta0 = 263.386, theta1 = 57.426, 差值 = 11865.7200\n",
      "第48次, theta0 = 266.702, theta1 = 58.147, 差值 = 11395.8374\n",
      "第49次, theta0 = 269.951, theta1 = 58.854, 差值 = 10944.5623\n",
      "第50次, theta0 = 273.135, theta1 = 59.546, 差值 = 10511.1576\n",
      "第51次, theta0 = 276.255, theta1 = 60.225, 差值 = 10094.9158\n",
      "第52次, theta0 = 279.313, theta1 = 60.890, 差值 = 9695.1571\n",
      "第53次, theta0 = 282.310, theta1 = 61.542, 差值 = 9311.2289\n",
      "第54次, theta0 = 285.246, theta1 = 62.181, 差值 = 8942.5042\n",
      "第55次, theta0 = 288.124, theta1 = 62.807, 差值 = 8588.3811\n",
      "第56次, theta0 = 290.945, theta1 = 63.420, 差值 = 8248.2812\n",
      "第57次, theta0 = 293.709, theta1 = 64.021, 差值 = 7921.6492\n",
      "第58次, theta0 = 296.418, theta1 = 64.610, 差值 = 7607.9519\n",
      "第59次, theta0 = 299.073, theta1 = 65.188, 差值 = 7306.6770\n",
      "第60次, theta0 = 301.674, theta1 = 65.753, 差值 = 7017.3326\n",
      "第61次, theta0 = 304.224, theta1 = 66.308, 差值 = 6739.4462\n",
      "第62次, theta0 = 306.722, theta1 = 66.851, 差值 = 6472.5642\n",
      "第63次, theta0 = 309.171, theta1 = 67.384, 差值 = 6216.2506\n",
      "第64次, theta0 = 311.570, theta1 = 67.906, 差值 = 5970.0871\n",
      "第65次, theta0 = 313.922, theta1 = 68.417, 差值 = 5733.6717\n",
      "第66次, theta0 = 316.226, theta1 = 68.919, 差值 = 5506.6183\n",
      "第67次, theta0 = 318.485, theta1 = 69.410, 差值 = 5288.5562\n",
      "第68次, theta0 = 320.698, theta1 = 69.891, 差值 = 5079.1294\n",
      "第69次, theta0 = 322.867, theta1 = 70.363, 差值 = 4877.9958\n",
      "第70次, theta0 = 324.993, theta1 = 70.825, 差值 = 4684.8272\n",
      "第71次, theta0 = 327.076, theta1 = 71.278, 差值 = 4499.3080\n",
      "第72次, theta0 = 329.118, theta1 = 71.722, 差值 = 4321.1354\n",
      "第73次, theta0 = 331.118, theta1 = 72.157, 差值 = 4150.0185\n",
      "第74次, theta0 = 333.079, theta1 = 72.584, 差值 = 3985.6777\n",
      "第75次, theta0 = 335.000, theta1 = 73.002, 差值 = 3827.8449\n",
      "第76次, theta0 = 336.883, theta1 = 73.411, 差值 = 3676.2622\n",
      "第77次, theta0 = 338.729, theta1 = 73.813, 差值 = 3530.6823\n",
      "第78次, theta0 = 340.537, theta1 = 74.206, 差值 = 3390.8672\n",
      "第79次, theta0 = 342.309, theta1 = 74.591, 差值 = 3256.5889\n",
      "第80次, theta0 = 344.046, theta1 = 74.969, 差值 = 3127.6280\n",
      "第81次, theta0 = 345.748, theta1 = 75.339, 差值 = 3003.7739\n",
      "第82次, theta0 = 347.416, theta1 = 75.702, 差值 = 2884.8245\n",
      "第83次, theta0 = 349.051, theta1 = 76.058, 差值 = 2770.5854\n",
      "第84次, theta0 = 350.653, theta1 = 76.406, 差值 = 2660.8702\n",
      "第85次, theta0 = 352.223, theta1 = 76.748, 差值 = 2555.4998\n",
      "第86次, theta0 = 353.761, theta1 = 77.082, 差值 = 2454.3020\n",
      "第87次, theta0 = 355.269, theta1 = 77.410, 差值 = 2357.1116\n",
      "第88次, theta0 = 356.747, theta1 = 77.731, 差值 = 2263.7700\n",
      "第89次, theta0 = 358.195, theta1 = 78.046, 差值 = 2174.1247\n",
      "第90次, theta0 = 359.614, theta1 = 78.355, 差值 = 2088.0294\n",
      "第91次, theta0 = 361.005, theta1 = 78.658, 差值 = 2005.3434\n",
      "第92次, theta0 = 362.368, theta1 = 78.954, 差值 = 1925.9318\n",
      "第93次, theta0 = 363.703, theta1 = 79.244, 差值 = 1849.6649\n",
      "第94次, theta0 = 365.012, theta1 = 79.529, 差值 = 1776.4182\n",
      "第95次, theta0 = 366.295, theta1 = 79.808, 差值 = 1706.0720\n",
      "第96次, theta0 = 367.552, theta1 = 80.082, 差值 = 1638.5116\n",
      "第97次, theta0 = 368.784, theta1 = 80.349, 差值 = 1573.6265\n",
      "第98次, theta0 = 369.991, theta1 = 80.612, 差值 = 1511.3109\n",
      "第99次, theta0 = 371.174, theta1 = 80.869, 差值 = 1451.4630\n",
      "第100次, theta0 = 372.334, theta1 = 81.122, 差值 = 1393.9851\n",
      "第101次, theta0 = 373.470, theta1 = 81.369, 差值 = 1338.7832\n",
      "第102次, theta0 = 374.584, theta1 = 81.611, 差值 = 1285.7674\n",
      "第103次, theta0 = 375.675, theta1 = 81.848, 差值 = 1234.8510\n",
      "第104次, theta0 = 376.745, theta1 = 82.081, 差值 = 1185.9509\n",
      "第105次, theta0 = 377.793, theta1 = 82.309, 差值 = 1138.9873\n",
      "第106次, theta0 = 378.820, theta1 = 82.532, 差值 = 1093.8834\n",
      "第107次, theta0 = 379.827, theta1 = 82.751, 差值 = 1050.5656\n",
      "第108次, theta0 = 380.813, theta1 = 82.966, 差值 = 1008.9632\n",
      "第109次, theta0 = 381.780, theta1 = 83.176, 差值 = 969.0083\n",
      "第110次, theta0 = 382.727, theta1 = 83.382, 差值 = 930.6355\n",
      "第111次, theta0 = 383.656, theta1 = 83.584, 差值 = 893.7824\n",
      "第112次, theta0 = 384.565, theta1 = 83.782, 差值 = 858.3886\n",
      "第113次, theta0 = 385.457, theta1 = 83.976, 差值 = 824.3964\n",
      "第114次, theta0 = 386.331, theta1 = 84.166, 差值 = 791.7503\n",
      "第115次, theta0 = 387.187, theta1 = 84.352, 差值 = 760.3970\n",
      "第116次, theta0 = 388.027, theta1 = 84.535, 差值 = 730.2853\n",
      "第117次, theta0 = 388.849, theta1 = 84.714, 差值 = 701.3660\n",
      "第118次, theta0 = 389.655, theta1 = 84.889, 差值 = 673.5919\n",
      "第119次, theta0 = 390.445, theta1 = 85.061, 差值 = 646.9176\n",
      "第120次, theta0 = 391.219, theta1 = 85.229, 差值 = 621.2997\n",
      "第121次, theta0 = 391.978, theta1 = 85.394, 差值 = 596.6962\n",
      "第122次, theta0 = 392.721, theta1 = 85.556, 差值 = 573.0671\n",
      "第123次, theta0 = 393.450, theta1 = 85.714, 差值 = 550.3736\n",
      "第124次, theta0 = 394.164, theta1 = 85.869, 差值 = 528.5788\n",
      "第125次, theta0 = 394.864, theta1 = 86.022, 差值 = 507.6471\n",
      "第126次, theta0 = 395.549, theta1 = 86.171, 差值 = 487.5443\n",
      "第127次, theta0 = 396.221, theta1 = 86.317, 差值 = 468.2375\n",
      "第128次, theta0 = 396.880, theta1 = 86.460, 差值 = 449.6953\n",
      "第129次, theta0 = 397.525, theta1 = 86.601, 差值 = 431.8874\n",
      "第130次, theta0 = 398.158, theta1 = 86.738, 差值 = 414.7846\n",
      "第131次, theta0 = 398.778, theta1 = 86.873, 差值 = 398.3592\n",
      "第132次, theta0 = 399.385, theta1 = 87.005, 差值 = 382.5841\n",
      "第133次, theta0 = 399.980, theta1 = 87.135, 差值 = 367.4338\n",
      "第134次, theta0 = 400.564, theta1 = 87.261, 差值 = 352.8834\n",
      "第135次, theta0 = 401.135, theta1 = 87.386, 差值 = 338.9092\n",
      "第136次, theta0 = 401.696, theta1 = 87.508, 差值 = 325.4884\n",
      "第137次, theta0 = 402.245, theta1 = 87.627, 差值 = 312.5991\n",
      "第138次, theta0 = 402.783, theta1 = 87.744, 差值 = 300.2202\n",
      "第139次, theta0 = 403.310, theta1 = 87.859, 差值 = 288.3315\n",
      "第140次, theta0 = 403.827, theta1 = 87.971, 差值 = 276.9135\n",
      "第141次, theta0 = 404.334, theta1 = 88.081, 差值 = 265.9478\n",
      "第142次, theta0 = 404.830, theta1 = 88.189, 差值 = 255.4162\n",
      "第143次, theta0 = 405.316, theta1 = 88.295, 差值 = 245.3017\n",
      "第144次, theta0 = 405.793, theta1 = 88.399, 差值 = 235.5878\n",
      "第145次, theta0 = 406.260, theta1 = 88.500, 差值 = 226.2585\n",
      "第146次, theta0 = 406.718, theta1 = 88.600, 差值 = 217.2987\n",
      "第147次, theta0 = 407.167, theta1 = 88.697, 差值 = 208.6936\n",
      "第148次, theta0 = 407.606, theta1 = 88.793, 差值 = 200.4294\n",
      "第149次, theta0 = 408.037, theta1 = 88.887, 差值 = 192.4924\n",
      "第150次, theta0 = 408.459, theta1 = 88.979, 差值 = 184.8697\n",
      "第151次, theta0 = 408.873, theta1 = 89.069, 差值 = 177.5488\n",
      "第152次, theta0 = 409.279, theta1 = 89.157, 差值 = 170.5179\n",
      "第153次, theta0 = 409.676, theta1 = 89.243, 差值 = 163.7654\n",
      "第154次, theta0 = 410.066, theta1 = 89.328, 差值 = 157.2803\n",
      "第155次, theta0 = 410.447, theta1 = 89.411, 差值 = 151.0520\n",
      "第156次, theta0 = 410.821, theta1 = 89.492, 差值 = 145.0703\n",
      "第157次, theta0 = 411.188, theta1 = 89.572, 差值 = 139.3255\n",
      "第158次, theta0 = 411.547, theta1 = 89.650, 差值 = 133.8083\n",
      "第159次, theta0 = 411.899, theta1 = 89.727, 差值 = 128.5094\n",
      "第160次, theta0 = 412.244, theta1 = 89.802, 差值 = 123.4205\n",
      "第161次, theta0 = 412.582, theta1 = 89.875, 差值 = 118.5330\n",
      "第162次, theta0 = 412.914, theta1 = 89.947, 差值 = 113.8391\n",
      "第163次, theta0 = 413.238, theta1 = 90.018, 差值 = 109.3311\n",
      "第164次, theta0 = 413.557, theta1 = 90.087, 差值 = 105.0016\n",
      "第165次, theta0 = 413.868, theta1 = 90.155, 差值 = 100.8435\n",
      "第166次, theta0 = 414.174, theta1 = 90.222, 差值 = 96.8501\n",
      "第167次, theta0 = 414.474, theta1 = 90.287, 差值 = 93.0148\n",
      "第168次, theta0 = 414.767, theta1 = 90.351, 差值 = 89.3315\n",
      "第169次, theta0 = 415.055, theta1 = 90.413, 差值 = 85.7939\n",
      "第170次, theta0 = 415.337, theta1 = 90.474, 差值 = 82.3965\n",
      "第171次, theta0 = 415.613, theta1 = 90.535, 差值 = 79.1336\n",
      "第172次, theta0 = 415.884, theta1 = 90.593, 差值 = 75.9999\n",
      "第173次, theta0 = 416.149, theta1 = 90.651, 差值 = 72.9903\n",
      "第174次, theta0 = 416.409, theta1 = 90.708, 差值 = 70.0999\n",
      "第175次, theta0 = 416.664, theta1 = 90.763, 差值 = 67.3239\n",
      "第176次, theta0 = 416.914, theta1 = 90.817, 差值 = 64.6579\n",
      "第177次, theta0 = 417.158, theta1 = 90.871, 差值 = 62.0975\n",
      "第178次, theta0 = 417.398, theta1 = 90.923, 差值 = 59.6384\n",
      "第179次, theta0 = 417.633, theta1 = 90.974, 差值 = 57.2767\n",
      "第180次, theta0 = 417.864, theta1 = 91.024, 差值 = 55.0086\n",
      "第181次, theta0 = 418.089, theta1 = 91.073, 差值 = 52.8302\n",
      "第182次, theta0 = 418.310, theta1 = 91.121, 差值 = 50.7381\n",
      "第183次, theta0 = 418.527, theta1 = 91.168, 差值 = 48.7289\n",
      "第184次, theta0 = 418.740, theta1 = 91.215, 差值 = 46.7992\n",
      "第185次, theta0 = 418.948, theta1 = 91.260, 差值 = 44.9460\n",
      "第186次, theta0 = 419.152, theta1 = 91.304, 差值 = 43.1661\n",
      "第187次, theta0 = 419.352, theta1 = 91.348, 差值 = 41.4568\n",
      "第188次, theta0 = 419.548, theta1 = 91.390, 差值 = 39.8151\n",
      "第189次, theta0 = 419.740, theta1 = 91.432, 差值 = 38.2384\n",
      "第190次, theta0 = 419.928, theta1 = 91.473, 差值 = 36.7241\n",
      "第191次, theta0 = 420.113, theta1 = 91.513, 差值 = 35.2699\n",
      "第192次, theta0 = 420.293, theta1 = 91.552, 差值 = 33.8732\n",
      "第193次, theta0 = 420.470, theta1 = 91.591, 差值 = 32.5318\n",
      "第194次, theta0 = 420.644, theta1 = 91.629, 差值 = 31.2435\n",
      "第195次, theta0 = 420.814, theta1 = 91.666, 差值 = 30.0063\n",
      "第196次, theta0 = 420.981, theta1 = 91.702, 差值 = 28.8181\n",
      "第197次, theta0 = 421.144, theta1 = 91.738, 差值 = 27.6769\n",
      "第198次, theta0 = 421.304, theta1 = 91.772, 差值 = 26.5809\n",
      "第199次, theta0 = 421.461, theta1 = 91.807, 差值 = 25.5283\n",
      "第200次, theta0 = 421.615, theta1 = 91.840, 差值 = 24.5173\n",
      "第201次, theta0 = 421.766, theta1 = 91.873, 差值 = 23.5464\n",
      "第202次, theta0 = 421.913, theta1 = 91.905, 差值 = 22.6140\n",
      "第203次, theta0 = 422.058, theta1 = 91.936, 差值 = 21.7185\n",
      "第204次, theta0 = 422.200, theta1 = 91.967, 差值 = 20.8584\n",
      "第205次, theta0 = 422.339, theta1 = 91.997, 差值 = 20.0324\n",
      "第206次, theta0 = 422.475, theta1 = 92.027, 差值 = 19.2392\n",
      "第207次, theta0 = 422.609, theta1 = 92.056, 差值 = 18.4773\n",
      "第208次, theta0 = 422.740, theta1 = 92.085, 差值 = 17.7456\n",
      "第209次, theta0 = 422.868, theta1 = 92.112, 差值 = 17.0429\n",
      "第210次, theta0 = 422.993, theta1 = 92.140, 差值 = 16.3680\n",
      "第211次, theta0 = 423.117, theta1 = 92.167, 差值 = 15.7198\n",
      "第212次, theta0 = 423.237, theta1 = 92.193, 差值 = 15.0973\n",
      "第213次, theta0 = 423.355, theta1 = 92.218, 差值 = 14.4994\n",
      "第214次, theta0 = 423.471, theta1 = 92.244, 差值 = 13.9253\n",
      "第215次, theta0 = 423.585, theta1 = 92.268, 差值 = 13.3738\n",
      "第216次, theta0 = 423.696, theta1 = 92.293, 差值 = 12.8442\n",
      "第217次, theta0 = 423.805, theta1 = 92.316, 差值 = 12.3356\n",
      "第218次, theta0 = 423.912, theta1 = 92.340, 差值 = 11.8471\n",
      "第219次, theta0 = 424.017, theta1 = 92.362, 差值 = 11.3780\n",
      "第220次, theta0 = 424.120, theta1 = 92.385, 差值 = 10.9274\n",
      "第221次, theta0 = 424.220, theta1 = 92.407, 差值 = 10.4947\n",
      "第222次, theta0 = 424.319, theta1 = 92.428, 差值 = 10.0791\n",
      "第223次, theta0 = 424.415, theta1 = 92.449, 差值 = 9.6799\n",
      "第224次, theta0 = 424.510, theta1 = 92.470, 差值 = 9.2966\n",
      "第225次, theta0 = 424.603, theta1 = 92.490, 差值 = 8.9285\n",
      "第226次, theta0 = 424.694, theta1 = 92.510, 差值 = 8.5749\n",
      "第227次, theta0 = 424.783, theta1 = 92.529, 差值 = 8.2353\n",
      "第228次, theta0 = 424.870, theta1 = 92.548, 差值 = 7.9092\n",
      "第229次, theta0 = 424.956, theta1 = 92.567, 差值 = 7.5960\n",
      "第230次, theta0 = 425.040, theta1 = 92.585, 差值 = 7.2952\n",
      "第231次, theta0 = 425.122, theta1 = 92.603, 差值 = 7.0063\n",
      "第232次, theta0 = 425.203, theta1 = 92.620, 差值 = 6.7289\n",
      "第233次, theta0 = 425.282, theta1 = 92.637, 差值 = 6.4624\n",
      "第234次, theta0 = 425.359, theta1 = 92.654, 差值 = 6.2065\n",
      "第235次, theta0 = 425.435, theta1 = 92.671, 差值 = 5.9607\n",
      "第236次, theta0 = 425.509, theta1 = 92.687, 差值 = 5.7247\n",
      "第237次, theta0 = 425.582, theta1 = 92.703, 差值 = 5.4980\n",
      "第238次, theta0 = 425.653, theta1 = 92.718, 差值 = 5.2803\n",
      "第239次, theta0 = 425.723, theta1 = 92.733, 差值 = 5.0712\n",
      "第240次, theta0 = 425.792, theta1 = 92.748, 差值 = 4.8703\n",
      "第241次, theta0 = 425.859, theta1 = 92.763, 差值 = 4.6775\n",
      "第242次, theta0 = 425.925, theta1 = 92.777, 差值 = 4.4922\n",
      "第243次, theta0 = 425.989, theta1 = 92.791, 差值 = 4.3144\n",
      "第244次, theta0 = 426.052, theta1 = 92.805, 差值 = 4.1435\n",
      "第245次, theta0 = 426.114, theta1 = 92.819, 差值 = 3.9794\n",
      "第246次, theta0 = 426.175, theta1 = 92.832, 差值 = 3.8218\n",
      "第247次, theta0 = 426.235, theta1 = 92.845, 差值 = 3.6705\n",
      "第248次, theta0 = 426.293, theta1 = 92.857, 差值 = 3.5251\n",
      "第249次, theta0 = 426.350, theta1 = 92.870, 差值 = 3.3855\n",
      "第250次, theta0 = 426.406, theta1 = 92.882, 差值 = 3.2515\n",
      "第251次, theta0 = 426.461, theta1 = 92.894, 差值 = 3.1227\n",
      "第252次, theta0 = 426.515, theta1 = 92.906, 差值 = 2.9991\n",
      "第253次, theta0 = 426.567, theta1 = 92.917, 差值 = 2.8803\n",
      "第254次, theta0 = 426.619, theta1 = 92.928, 差值 = 2.7662\n",
      "第255次, theta0 = 426.670, theta1 = 92.939, 差值 = 2.6567\n",
      "第256次, theta0 = 426.719, theta1 = 92.950, 差值 = 2.5515\n",
      "第257次, theta0 = 426.768, theta1 = 92.961, 差值 = 2.4505\n",
      "第258次, theta0 = 426.816, theta1 = 92.971, 差值 = 2.3534\n",
      "第259次, theta0 = 426.862, theta1 = 92.981, 差值 = 2.2602\n",
      "第260次, theta0 = 426.908, theta1 = 92.991, 差值 = 2.1707\n",
      "第261次, theta0 = 426.953, theta1 = 93.001, 差值 = 2.0848\n",
      "第262次, theta0 = 426.997, theta1 = 93.010, 差值 = 2.0022\n",
      "第263次, theta0 = 427.040, theta1 = 93.020, 差值 = 1.9229\n",
      "第264次, theta0 = 427.082, theta1 = 93.029, 差值 = 1.8468\n",
      "第265次, theta0 = 427.123, theta1 = 93.038, 差值 = 1.7736\n",
      "第266次, theta0 = 427.164, theta1 = 93.047, 差值 = 1.7034\n",
      "第267次, theta0 = 427.204, theta1 = 93.055, 差值 = 1.6359\n",
      "第268次, theta0 = 427.243, theta1 = 93.064, 差值 = 1.5712\n",
      "第269次, theta0 = 427.281, theta1 = 93.072, 差值 = 1.5089\n",
      "第270次, theta0 = 427.318, theta1 = 93.080, 差值 = 1.4492\n",
      "第271次, theta0 = 427.355, theta1 = 93.088, 差值 = 1.3918\n",
      "第272次, theta0 = 427.391, theta1 = 93.096, 差值 = 1.3367\n",
      "第273次, theta0 = 427.426, theta1 = 93.104, 差值 = 1.2837\n",
      "第274次, theta0 = 427.460, theta1 = 93.111, 差值 = 1.2329\n",
      "第275次, theta0 = 427.494, theta1 = 93.119, 差值 = 1.1841\n",
      "第276次, theta0 = 427.527, theta1 = 93.126, 差值 = 1.1372\n",
      "第277次, theta0 = 427.560, theta1 = 93.133, 差值 = 1.0922\n",
      "第278次, theta0 = 427.591, theta1 = 93.140, 差值 = 1.0489\n",
      "第279次, theta0 = 427.623, theta1 = 93.147, 差值 = 1.0074\n",
      "第280次, theta0 = 427.653, theta1 = 93.153, 差值 = 0.9675\n",
      "第281次, theta0 = 427.683, theta1 = 93.160, 差值 = 0.9292\n",
      "第282次, theta0 = 427.712, theta1 = 93.166, 差值 = 0.8924\n",
      "第283次, theta0 = 427.741, theta1 = 93.172, 差值 = 0.8570\n",
      "第284次, theta0 = 427.769, theta1 = 93.178, 差值 = 0.8231\n",
      "第285次, theta0 = 427.797, theta1 = 93.184, 差值 = 0.7905\n",
      "第286次, theta0 = 427.824, theta1 = 93.190, 差值 = 0.7592\n",
      "第287次, theta0 = 427.851, theta1 = 93.196, 差值 = 0.7291\n",
      "第288次, theta0 = 427.877, theta1 = 93.202, 差值 = 0.7003\n",
      "第289次, theta0 = 427.902, theta1 = 93.207, 差值 = 0.6725\n",
      "第290次, theta0 = 427.927, theta1 = 93.213, 差值 = 0.6459\n",
      "第291次, theta0 = 427.951, theta1 = 93.218, 差值 = 0.6203\n",
      "第292次, theta0 = 427.975, theta1 = 93.223, 差值 = 0.5958\n",
      "第293次, theta0 = 427.999, theta1 = 93.228, 差值 = 0.5722\n",
      "第294次, theta0 = 428.022, theta1 = 93.233, 差值 = 0.5495\n",
      "第295次, theta0 = 428.045, theta1 = 93.238, 差值 = 0.5277\n",
      "第296次, theta0 = 428.067, theta1 = 93.243, 差值 = 0.5069\n",
      "第297次, theta0 = 428.088, theta1 = 93.248, 差值 = 0.4868\n",
      "第298次, theta0 = 428.110, theta1 = 93.252, 差值 = 0.4675\n",
      "第299次, theta0 = 428.130, theta1 = 93.257, 差值 = 0.4490\n",
      "第300次, theta0 = 428.151, theta1 = 93.261, 差值 = 0.4312\n",
      "第301次, theta0 = 428.171, theta1 = 93.266, 差值 = 0.4141\n",
      "第302次, theta0 = 428.190, theta1 = 93.270, 差值 = 0.3977\n",
      "第303次, theta0 = 428.209, theta1 = 93.274, 差值 = 0.3820\n",
      "第304次, theta0 = 428.228, theta1 = 93.278, 差值 = 0.3669\n",
      "第305次, theta0 = 428.247, theta1 = 93.282, 差值 = 0.3523\n",
      "第306次, theta0 = 428.265, theta1 = 93.286, 差值 = 0.3384\n",
      "第307次, theta0 = 428.283, theta1 = 93.290, 差值 = 0.3250\n",
      "第308次, theta0 = 428.300, theta1 = 93.294, 差值 = 0.3121\n",
      "第309次, theta0 = 428.317, theta1 = 93.298, 差值 = 0.2997\n",
      "第310次, theta0 = 428.334, theta1 = 93.301, 差值 = 0.2879\n",
      "第311次, theta0 = 428.350, theta1 = 93.305, 差值 = 0.2765\n",
      "第312次, theta0 = 428.366, theta1 = 93.308, 差值 = 0.2655\n",
      "第313次, theta0 = 428.382, theta1 = 93.312, 差值 = 0.2550\n",
      "第314次, theta0 = 428.397, theta1 = 93.315, 差值 = 0.2449\n",
      "第315次, theta0 = 428.412, theta1 = 93.318, 差值 = 0.2352\n",
      "第316次, theta0 = 428.427, theta1 = 93.321, 差值 = 0.2259\n",
      "第317次, theta0 = 428.441, theta1 = 93.325, 差值 = 0.2170\n",
      "第318次, theta0 = 428.455, theta1 = 93.328, 差值 = 0.2084\n",
      "第319次, theta0 = 428.469, theta1 = 93.331, 差值 = 0.2001\n",
      "第320次, theta0 = 428.483, theta1 = 93.334, 差值 = 0.1922\n",
      "第321次, theta0 = 428.496, theta1 = 93.337, 差值 = 0.1846\n",
      "第322次, theta0 = 428.509, theta1 = 93.339, 差值 = 0.1773\n",
      "第323次, theta0 = 428.522, theta1 = 93.342, 差值 = 0.1703\n",
      "第324次, theta0 = 428.535, theta1 = 93.345, 差值 = 0.1635\n",
      "第325次, theta0 = 428.547, theta1 = 93.348, 差值 = 0.1570\n",
      "第326次, theta0 = 428.559, theta1 = 93.350, 差值 = 0.1508\n",
      "第327次, theta0 = 428.571, theta1 = 93.353, 差值 = 0.1448\n",
      "第328次, theta0 = 428.582, theta1 = 93.355, 差值 = 0.1391\n",
      "第329次, theta0 = 428.594, theta1 = 93.358, 差值 = 0.1336\n",
      "第330次, theta0 = 428.605, theta1 = 93.360, 差值 = 0.1283\n",
      "第331次, theta0 = 428.616, theta1 = 93.363, 差值 = 0.1232\n",
      "第332次, theta0 = 428.626, theta1 = 93.365, 差值 = 0.1183\n",
      "第333次, theta0 = 428.637, theta1 = 93.367, 差值 = 0.1137\n",
      "第334次, theta0 = 428.647, theta1 = 93.369, 差值 = 0.1092\n",
      "第335次, theta0 = 428.657, theta1 = 93.372, 差值 = 0.1048\n",
      "第336次, theta0 = 428.667, theta1 = 93.374, 差值 = 0.1007\n",
      "第337次, theta0 = 428.677, theta1 = 93.376, 差值 = 0.0967\n",
      "第338次, theta0 = 428.686, theta1 = 93.378, 差值 = 0.0929\n",
      "第339次, theta0 = 428.696, theta1 = 93.380, 差值 = 0.0892\n",
      "第340次, theta0 = 428.705, theta1 = 93.382, 差值 = 0.0857\n",
      "第341次, theta0 = 428.714, theta1 = 93.384, 差值 = 0.0823\n",
      "第342次, theta0 = 428.722, theta1 = 93.386, 差值 = 0.0790\n",
      "第343次, theta0 = 428.731, theta1 = 93.388, 差值 = 0.0759\n",
      "第344次, theta0 = 428.739, theta1 = 93.389, 差值 = 0.0729\n",
      "第345次, theta0 = 428.747, theta1 = 93.391, 差值 = 0.0700\n",
      "第346次, theta0 = 428.755, theta1 = 93.393, 差值 = 0.0672\n",
      "第347次, theta0 = 428.763, theta1 = 93.395, 差值 = 0.0646\n",
      "第348次, theta0 = 428.771, theta1 = 93.396, 差值 = 0.0620\n",
      "第349次, theta0 = 428.779, theta1 = 93.398, 差值 = 0.0595\n",
      "第350次, theta0 = 428.786, theta1 = 93.400, 差值 = 0.0572\n",
      "第351次, theta0 = 428.793, theta1 = 93.401, 差值 = 0.0549\n",
      "第352次, theta0 = 428.801, theta1 = 93.403, 差值 = 0.0527\n",
      "第353次, theta0 = 428.807, theta1 = 93.404, 差值 = 0.0507\n",
      "第354次, theta0 = 428.814, theta1 = 93.406, 差值 = 0.0487\n",
      "第355次, theta0 = 428.821, theta1 = 93.407, 差值 = 0.0467\n",
      "第356次, theta0 = 428.828, theta1 = 93.409, 差值 = 0.0449\n",
      "第357次, theta0 = 428.834, theta1 = 93.410, 差值 = 0.0431\n",
      "第358次, theta0 = 428.840, theta1 = 93.411, 差值 = 0.0414\n",
      "第359次, theta0 = 428.847, theta1 = 93.413, 差值 = 0.0398\n",
      "第360次, theta0 = 428.853, theta1 = 93.414, 差值 = 0.0382\n",
      "第361次, theta0 = 428.859, theta1 = 93.415, 差值 = 0.0367\n",
      "第362次, theta0 = 428.864, theta1 = 93.417, 差值 = 0.0352\n",
      "第363次, theta0 = 428.870, theta1 = 93.418, 差值 = 0.0338\n",
      "第364次, theta0 = 428.876, theta1 = 93.419, 差值 = 0.0325\n",
      "第365次, theta0 = 428.881, theta1 = 93.420, 差值 = 0.0312\n",
      "第366次, theta0 = 428.887, theta1 = 93.421, 差值 = 0.0300\n",
      "第367次, theta0 = 428.892, theta1 = 93.423, 差值 = 0.0288\n",
      "第368次, theta0 = 428.897, theta1 = 93.424, 差值 = 0.0276\n",
      "第369次, theta0 = 428.902, theta1 = 93.425, 差值 = 0.0265\n",
      "第370次, theta0 = 428.907, theta1 = 93.426, 差值 = 0.0255\n",
      "第371次, theta0 = 428.912, theta1 = 93.427, 差值 = 0.0245\n",
      "第372次, theta0 = 428.917, theta1 = 93.428, 差值 = 0.0235\n",
      "第373次, theta0 = 428.921, theta1 = 93.429, 差值 = 0.0226\n",
      "第374次, theta0 = 428.926, theta1 = 93.430, 差值 = 0.0217\n",
      "第375次, theta0 = 428.930, theta1 = 93.431, 差值 = 0.0208\n",
      "第376次, theta0 = 428.935, theta1 = 93.432, 差值 = 0.0200\n",
      "第377次, theta0 = 428.939, theta1 = 93.433, 差值 = 0.0192\n",
      "第378次, theta0 = 428.943, theta1 = 93.434, 差值 = 0.0184\n",
      "第379次, theta0 = 428.947, theta1 = 93.435, 差值 = 0.0177\n",
      "第380次, theta0 = 428.951, theta1 = 93.436, 差值 = 0.0170\n",
      "第381次, theta0 = 428.955, theta1 = 93.436, 差值 = 0.0163\n",
      "第382次, theta0 = 428.959, theta1 = 93.437, 差值 = 0.0157\n",
      "第383次, theta0 = 428.963, theta1 = 93.438, 差值 = 0.0151\n",
      "第384次, theta0 = 428.967, theta1 = 93.439, 差值 = 0.0145\n",
      "第385次, theta0 = 428.971, theta1 = 93.440, 差值 = 0.0139\n",
      "第386次, theta0 = 428.974, theta1 = 93.441, 差值 = 0.0134\n",
      "第387次, theta0 = 428.978, theta1 = 93.441, 差值 = 0.0128\n",
      "第388次, theta0 = 428.981, theta1 = 93.442, 差值 = 0.0123\n",
      "第389次, theta0 = 428.984, theta1 = 93.443, 差值 = 0.0118\n",
      "第390次, theta0 = 428.988, theta1 = 93.443, 差值 = 0.0114\n",
      "第391次, theta0 = 428.991, theta1 = 93.444, 差值 = 0.0109\n",
      "第392次, theta0 = 428.994, theta1 = 93.445, 差值 = 0.0105\n",
      "第393次, theta0 = 428.997, theta1 = 93.446, 差值 = 0.0101\n",
      "第394次, theta0 = 429.000, theta1 = 93.446, 差值 = 0.0097\n"
     ]
    }
   ],
   "source": [
    "# 学习率\n",
    "ETA = 1e-3\n",
    "# 误差的差值\n",
    "diff = 1\n",
    "# 更新次数\n",
    "count = 0\n",
    "\n",
    "error = E(train_z, train_y)\n",
    "\n",
    "while diff > 1e-2:\n",
    "    # 梯度下降\n",
    "    tmp0 = theta0 - ETA * np.sum(f(train_z) - train_y)\n",
    "    tmp1 = theta1 - ETA * np.sum((f(train_z) - train_y) * train_z)\n",
    "    theta0 = tmp0\n",
    "    theta1 = tmp1\n",
    "    \n",
    "    # 更新次数\n",
    "    count = count + 1\n",
    "    # 重新计算误差\n",
    "    error_current = E(train_z, train_y)\n",
    "    diff = error - error_current\n",
    "    error = error_current\n",
    "    # 日志\n",
    "    log = '第{}次, theta0 = {:.3f}, theta1 = {:.3f}, 差值 = {:.4f}'\n",
    "    print(log.format(count, theta0, theta1, diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "4ed8c72b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-3, 3, 100)\n",
    "plt.plot(train_z, train_y, 'o')\n",
    "plt.plot(x, f(x))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c37651e9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "370.9673813231127"
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(standardize(100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "c81b515b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "510.46982520439093"
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(standardize(200))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "a1a82dbb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "649.9722690856692"
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(standardize(300))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "201ffba6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}